package com.ruyuan.o2o.groupbuy.account.admin.controller;

import com.ruyuan.o2o.groupbuy.account.vo.RoleAuthVO;
import com.ruyuan.o2o.groupbuy.account.vo.RoleVO;
import com.ruyuan.o2o.groupbuy.account.service.RoleService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * 商户角色
 *
 * @author ming qian
 */
@RestController
@RequestMapping("/role")
@Slf4j
@Api(tags = "商户角色")
public class RoleController {

    @Resource
    private RoleService roleService;

    /**
     * 创建角色
     *
     * @param roleVO 前台表单
     * @return 创建结果
     */
    @PostMapping("/save")
    @ApiOperation("创建角色")
    public Boolean save(@RequestBody RoleVO roleVO) {
        roleService.save(roleVO);
        log.info("{} # 创建角色完成", roleVO.getRoleName());
        return Boolean.TRUE;
    }

    /**
     * 更新角色
     *
     * @param roleVO 前台表单
     * @return 更新结果
     */
    @PostMapping("/update")
    @ApiOperation("更新角色")
    public Boolean update(@RequestBody RoleVO roleVO) {
        roleService.update(roleVO);
        log.info("{} # 更新角色完成", roleVO.getRoleName());
        return Boolean.TRUE;
    }


    /**
     * 分页查询角色列表
     *
     * @param pageNum  页数
     * @param pageSize 每页展示数据数量
     * @return 角色列表
     */
    @GetMapping("/page")
    @ApiOperation("查询角色列表")
    public List<RoleVO> page(Integer pageNum, Integer pageSize) {
        return roleService.listByPage(pageNum, pageSize);
    }

    /**
     * 查询角色详情
     *
     * @param roleId 角色id
     * @return 角色详情
     */
    @GetMapping("/{roleId}")
    @ApiOperation("查询角色详情")
    public RoleVO page(@PathVariable("roleId") Integer roleId) {
        return roleService.findById(roleId);
    }

    /**
     * 角色绑定权限
     * 前台权限id可多选，一个角色可绑定多个权限id（auth_id）
     *
     * @param roleAuthVO 前台表单
     * @return 绑定结果
     */
    @PostMapping("/bind/auth")
    @ApiOperation("角色绑定权限")
    public String bindAuth(@RequestBody RoleAuthVO roleAuthVO) {
        if (!roleService.roleBindAuth(roleAuthVO)) {
            return "fail";
        }
        log.info("{} # 绑定成功", roleAuthVO.getRoleId());
        return "success";
    }
}
